/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.input;

import java.math.BigInteger;

import org.apache.commons.lang.StringUtils;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.IAdresse;
import fr.generali.accueilclient.client.om.IClientProfessionnel;
import fr.generali.accueilclient.client.om.IContact;
import fr.generali.accueilclient.client.om.ICoordonneeBancaire;
import fr.generali.accueilclient.client.om.IEmail;
import fr.generali.accueilclient.client.om.ILien;
import fr.generali.accueilclient.client.om.IPieceIdentite;
import fr.generali.accueilclient.client.om.ISiteInternet;
import fr.generali.accueilclient.client.om.ITelephone;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDesactivationAdresse;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDesactivationContact;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDesactivationDocument;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDesactivationDonneesBancaires;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDesactivationLienPersonne;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDossierP18;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoListeDossierP18;
import fr.generali.refservcommuns.rce.desactivation.desactivationservice.Desactivation;

/**
 * @author selrhazala
 */
@Component("contactProToDesactivationContactConverter")
public class ContactProToDesactivationContactConverter implements Converter<IContact, Desactivation> {

    /**
     * {@inheritDoc}
     */
    public Desactivation convert(IContact input) {
        Desactivation desactivation = null;

        if (input != null) {
            IClientProfessionnel clientProfessionnel = IClientProfessionnel.class.cast(input.getClient());
            desactivation = new Desactivation();

            DtoListeDossierP18 listeDossierP18 = new DtoListeDossierP18();
            DtoDossierP18 dtoDossierP18 = new DtoDossierP18();
            dtoDossierP18.setCodeUser("BC");
            // dtoDossierP18.getIdentifiantPersonne().add(client.getNumeroClient());

            // Si input.getAdresse() != null c'est que l'on souhaite désactiver
            // l'adresse
            if (input.getAdresse() != null) {
                IAdresse adresse = input.getAdresse();

                DtoDesactivationAdresse dtoDesactivationAdresse = new DtoDesactivationAdresse();
                dtoDesactivationAdresse.setIdentifiantAdresse(adresse.getIdentifiant());
                dtoDesactivationAdresse.setMotifDesactivation("01");
                dtoDesactivationAdresse.setIdentifiantPersonne(clientProfessionnel.getSphereProfessionnelle()
                                .getIdSpherePro());

                dtoDossierP18.getDesactivationAdresse().add(dtoDesactivationAdresse);
                listeDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Si input.getTelephone() != null c'est que l'on souhaite
            // désactiver le téléphone
            if (input.getTelephone() != null) {
                ITelephone telephone = input.getTelephone();

                DtoDesactivationContact dtoDesactivationContact = new DtoDesactivationContact();

                if (telephone.getNumOrdre() != null) {
                    BigInteger bNumeroOrdreTel = new BigInteger(telephone.getNumOrdre());
                    dtoDesactivationContact.setNumeroOrdre(bNumeroOrdreTel);
                }

                dtoDesactivationContact.setTypeContact("P");
                dtoDesactivationContact.setMotifDesactivation("01");
                dtoDesactivationContact.setIdentifiantPersonne(clientProfessionnel.getSphereProfessionnelle()
                                .getIdSpherePro());

                dtoDossierP18.getDesactivationContact().add(dtoDesactivationContact);
                listeDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Si input.getMail() != null c'est que l'on souhaite désactiver le
            // mail
            if (input.getMail() != null) {
                IEmail email = input.getMail();

                DtoDesactivationContact dtoDesactivationContact = new DtoDesactivationContact();

                if (email.getNumOrdre() != null) {
                    BigInteger bNumeroOrdreEmail = new BigInteger(email.getNumOrdre());
                    dtoDesactivationContact.setNumeroOrdre(bNumeroOrdreEmail);
                }

                dtoDesactivationContact.setTypeContact("E");
                dtoDesactivationContact.setMotifDesactivation("01");
                dtoDesactivationContact.setIdentifiantPersonne(clientProfessionnel.getSphereProfessionnelle()
                                .getIdSpherePro());

                dtoDossierP18.getDesactivationContact().add(dtoDesactivationContact);
                listeDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Si input.getAdresse() != null c'est que l'on souhaite désactiver
            // le rib
            if (input.getCoordonneeBancaire() != null) {
                ICoordonneeBancaire rib = input.getCoordonneeBancaire();

                DtoDesactivationDonneesBancaires dtoDesactivationDonneesBancaires =
                                new DtoDesactivationDonneesBancaires();

                if (StringUtils.isNotEmpty(rib.getIdentifiant())) {
                    int idRib = Integer.parseInt(rib.getIdentifiant()) + 1;
                    dtoDesactivationDonneesBancaires.setIdentifiantDonneesbancaires(String.valueOf(idRib));
                }

                dtoDesactivationDonneesBancaires.setMotifDesactivation("01");
                dtoDesactivationDonneesBancaires.setIdentifiantPersonne(clientProfessionnel.getSphereProfessionnelle()
                                .getIdSpherePro());

                dtoDossierP18.getDesactivationDonneesBancaires().add(dtoDesactivationDonneesBancaires);
                listeDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Si input.getSiteInternet() != null c'est que l'on souhaite
            // désactiver
            // le site internet
            if (input.getSiteInternet() != null) {
                ISiteInternet siteInternet = input.getSiteInternet();

                DtoDesactivationContact dtoDesactivationContact = new DtoDesactivationContact();

                if (siteInternet.getNumOrdre() != null) {
                    BigInteger bNumeroOrdreEmail = new BigInteger(siteInternet.getNumOrdre());
                    dtoDesactivationContact.setNumeroOrdre(bNumeroOrdreEmail);
                }

                dtoDesactivationContact.setTypeContact("W");
                dtoDesactivationContact.setMotifDesactivation("01");
                dtoDesactivationContact.setIdentifiantPersonne(clientProfessionnel.getSphereProfessionnelle()
                                .getIdSpherePro());

                dtoDossierP18.getDesactivationContact().add(dtoDesactivationContact);
                listeDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Si input.getPieceIdentite() != null c'est que l'on souhaite
            // désactiver
            // la pièce d'identité
            if (input.getPieceIdentite() != null) {
                IPieceIdentite pieceIdentite = input.getPieceIdentite();

                DtoDesactivationDocument dtoDesactivationDocument = new DtoDesactivationDocument();
                dtoDesactivationDocument.setTypeDocument(pieceIdentite.getType());
                dtoDesactivationDocument.setCategoriePermisConduire(pieceIdentite.getCategorie());
                dtoDesactivationDocument.setNumeroDocument(pieceIdentite.getNumero());
                dtoDesactivationDocument.setIdentifiantPersonne(clientProfessionnel.getSphereProfessionnelle()
                                .getIdSpherePro());

                dtoDossierP18.getDesactivationDocument().add(dtoDesactivationDocument);
                listeDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Si input.getLien() != null c'est que l'on souhaite désactiver
            // un lien
            if (input.getLien() != null) {
                ILien lien = input.getLien();

                DtoDesactivationLienPersonne dtoDesactivationLienPersonne = new DtoDesactivationLienPersonne();
                dtoDesactivationLienPersonne.setIdentifiantCible(lien.getPersonneLiee().getNumeroClient());
                dtoDesactivationLienPersonne.setIdentifiantOrigine(clientProfessionnel.getSphereProfessionnelle()
                                .getIdSpherePro());
                dtoDesactivationLienPersonne.setTypeLien(lien.getRole1());

                dtoDossierP18.getDesactivationLienpersonne().add(dtoDesactivationLienPersonne);
                listeDossierP18.getDossierP18().add(dtoDossierP18);
            }

            desactivation.setDtoListeDossierP18(listeDossierP18);
        }

        return desactivation;
    }

}
